package com.example.blog_system.common;

import java.util.Random;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;

import org.springframework.stereotype.Component;

/**
 * Created with IntelliJ IDEA.
 * Description:  邮箱工具类 提供去发送邮箱的方法
 */
@Component
@Slf4j
/**
 * 发送qq邮箱 验证码
 */
public class EmailUtils {
    public static final String EMAIL="EMAIL";
    public static final String EMAIL_TIME="EMAIL_TIME";
    public static final String EMAIL_CAPTCHA="EMAIL_CAPTCHA";
    public static final long EMAIL_TIMEOUT=60*1000*3;
//    public void send() {
//        yzm = random1();
//        try {
//            //HtmlEmail方式
//            //sendEmail();
//            //javax.mail方式
////            sendEmail("XXX@qq.com", "XXX", "XXX@qq.com", "测试", "<html><h1>我的验证码："+yzm+"</h1></html>");
//        } catch (MessagingException e) {
//            //  Auto-generated catch block
//            e.printStackTrace();
//        } catch (GeneralSecurityException e) {
//            //  Auto-generated catch block
//            e.printStackTrace();
//        }
//    }

    /**
     * 方式1：发送QQ邮件
     */
    public static String  sendEmail(String email) {
        HtmlEmail send = new HtmlEmail();//创建一个HtmlEmail实例对象
        // 获取随机验证码
        String resultCode = EmailUtils.random1();
        try {
            send.setHostName("smtp.qq.com");
            //            这个替换成自己邮箱的账户和授权码！！！！！
            send.setAuthentication("2568156343@qq.com", "ilfrqdzhzpkyecaa"); //第一个参数是发送者的QQEamil邮箱   第二个参数是刚刚获取的授权码

            send.setFrom("2568156343@qq.com", "筱");//发送人的邮箱为自己的，用户名可以随便填  记得是自己的邮箱不是qq
//			send.setSmtpPort(465); 	//端口号 可以不开
            send.setSSLOnConnect(true); //开启SSL加密
            send.setCharset("utf-8");
            send.addTo(email);  //设置收件人    email为你要发送给谁的邮箱账户
            send.setSubject("博客系统验证码"); //邮箱标题
            send.setMsg("<font color='red'>您的博客系统验证码为:</font>   " + resultCode + " ，验证码将在三分钟后失效,请尽快使用.(如果您没有注册过,请忽略此误发的邮件~)"); //Eamil发送的内容
            send.send();  //发送

        } catch (EmailException e) {
            log.error("QQ邮箱发送失败!");
            e.printStackTrace();
            return null;
        }
        return resultCode;
    }
    public static String  sendMyselfEmail(String data) {
        HtmlEmail send = new HtmlEmail();//创建一个HtmlEmail实例对象
        // 获取随机验证码
        String resultCode = EmailUtils.random1();
        try {
            send.setHostName("smtp.qq.com");
//            这个替换成自己邮箱的账户和授权码！！！！！
            send.setAuthentication("2568156343@qq.com", "ilfrqdzhzpkyecaa"); //第一个参数是发送者的QQEamil邮箱   第二个参数是刚刚获取的授权码

            send.setFrom("2568156343@qq.com", "筱");//发送人的邮箱为自己的，用户名可以随便填  记得是自己的邮箱不是qq
//			send.setSmtpPort(465); 	//端口号 可以不开
            send.setSSLOnConnect(true); //开启SSL加密
            send.setCharset("utf-8");
            send.addTo("2568156343@qq.com");  //设置收件人    email为你要发送给谁的邮箱账户
            send.setSubject("个人博客系统访客日志"); //邮箱标题
            send.setMsg(data); //Eamil发送的内容
            send.send();  //发送
        } catch (EmailException e) {
            log.error("QQ邮箱发送失败!");
            e.printStackTrace();
            return null;
        }
        return resultCode;
    }
//    /**方式2：发送QQ邮件
//     * @param sender 发送方的邮箱
//     * @param auth qq邮箱中申请的16位授权码
//     * @param to 接收人邮箱
//     * @param title 邮件标题
//     * @param content 邮件内容
//     * */
//    public static void sendMail(String sender,String auth,String to,String title,String content) throws MessagingException, GeneralSecurityException, javax.mail.MessagingException {
//        //创建一个配置文件并保存
//        Properties properties = new Properties();
//        properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
//        properties.setProperty("mail.smtp.socketFactory.fallback", "false");
//        properties.setProperty("mail.smtp.port", "465");
//        properties.setProperty("mail.smtp.socketFactory.port", "465");
//
//
//        properties.setProperty("mail.host","smtp.qq.com");
//        properties.setProperty("mail.transport.protocol","smtp");
//        properties.setProperty("mail.smtp.auth","true");
//        //QQ存在一个特性设置SSL加密
//        MailSSLSocketFactory sf = new MailSSLSocketFactory();
//        sf.setTrustAllHosts(true);
//        properties.put("mail.smtp.ssl.enable", "true");
//        properties.put("mail.smtp.ssl.socketFactory", sf);
//
//        //创建一个session对象
//        Session session = Session.getDefaultInstance(properties, new Authenticator() {
//            @Override
//            protected PasswordAuthentication getPasswordAuthentication() {
//                return new PasswordAuthentication(sender,auth);
//            }
//        });
//        //开启debug模式
//        session.setDebug(true);
//        //获取连接对象
//        Transport transport = session.getTransport();
//        //连接服务器
//        transport.connect("smtp.qq.com",sender,auth);
//        //创建邮件对象
//        MimeMessage mimeMessage = new MimeMessage(session);
//        //邮件发送人
//        mimeMessage.setFrom(new InternetAddress(sender));
//        //邮件接收人
//        mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(to));
//        //邮件标题
//        mimeMessage.setSubject(title);
//        //邮件内容
//        mimeMessage.setContent(content,"text/html;charset=UTF-8");
//        //发送邮件
//        transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
//        //关闭连接
//        transport.close();
//    }
    //生成6位数  验证码
    private static String random1(){
        String code = "";
        Random rd=new Random();
        for (int i = 0; i < 6; i++) {
            int r = rd.nextInt(10); //每次随机出一个数字（0-9）
            code = code + r;  //把每次随机出的数字拼在一起
        }

        return code;
    }
}


